package com.demo.socket;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author gy
 * @date 2022/5/4
 */
public class SocketTCP02Server {
    public static void main(String[] args) throws IOException {
        // 思路
        // 1、在本机的 9999 端口监听，等待连接
        // 细节：要求本机没有其他服务在监听9999
        // 细节：serverSocket 可以通过 accept（）返回多个Socket【多并发：多个客户端连接我们服务器的并发】
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务器端在 9999 端口监听，等待连接");

        // 2、当没有客户端连接9999端口事，程序会阻塞，等待连接
        // 如果有客户端连接，则会返回一个Socket对象
        Socket socket = serverSocket.accept();
        System.out.println("服务器端的 socket = "+socket.getClass());

        // 3、通过socket.getInputStream（） 读取客户端写入数据通道的数据，显示
        InputStream inputStream = socket.getInputStream();

        // 4、IO读取
        byte[] buf = new byte[1024];
        int readLen = 0;
        while ((readLen = inputStream.read(buf)) != -1){
            System.out.println(new String(buf,0,readLen));// 根据读取到的实际长度，显示内容
        }

        // 5、获取和socket相关的输出流对象，并发送消息
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("hello client".getBytes());
        // 细节：设置结束标记
        socket.shutdownOutput();

        // 6、关闭资源 流、socket
        inputStream.close();
        socket.close();
        serverSocket.close();
        outputStream.close();
    }
}
